﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bmz.Laboratory.DesignPattern
{
    class Proxy
    {
        /** 
         *  
         * @author 阿福(trygf521@126.com)<br> 
         *定义一种类型的女人，王婆和潘金莲都属于这个类型的女人 
         */
        public interface KindWoman
        {
            //这种女人能做什么事情呢？  
            void makeEyesWithMan();//抛媚眼  
            void happyWithMan();//和男人那个....  
        }

        /** 
         *  
         * @author 阿福(trygf521@126.com)<br> 
         *定义一个潘金莲是什么样的人 
         */
        public class PanJinLian : KindWoman
        {
            public void happyWithMan()
            {
                Console.WriteLine("潘金莲和男人在做那个...");
            }
            public void makeEyesWithMan()
            {
                Console.WriteLine("潘金莲抛媚眼...");
            }

        }

        /** 
         *  
         * @author 阿福(trygf521@126.com)<br> 
         *定义一个贾氏是什么样的人 
         */
        public class JiaShi : KindWoman
        {
            public void happyWithMan()
            {
                Console.WriteLine("贾氏和男人在做那个...");
            }

            public void makeEyesWithMan()
            {
                Console.WriteLine("贾氏抛媚眼...");
            }


        }

        /** 
         *  
         * @author 阿福(trygf521@126.com)<br> 
         *王婆这个人老聪明了，她太老了，是个男人都看不上她， 
         *但是她有智慧经验呀，他作为一类女人的代理！ 
         */
        public class WangPo : KindWoman
        {

            private KindWoman kindWoman;
            public WangPo()
            {
                //默认的话是潘金莲的代理  
                this.kindWoman = new PanJinLian();
            }
            //她可以是KindWomam的任何一个女人的代理，只要你是这一类型  
            public WangPo(KindWoman kindWoman)
            {
                this.kindWoman = kindWoman;
            }


            public void happyWithMan()
            {
                //自己老了，干不了了，但可以叫年轻的代替。  
                this.kindWoman.happyWithMan();
            }


            public void makeEyesWithMan()
            {
                //王婆年纪大了，谁看她抛媚眼啊  
                this.kindWoman.makeEyesWithMan();
            }
        }

        /** 
        *  
        * @author 阿福(trygf521@126.com)<br> 
        *水浒传是这样写的：西门庆被潘金莲用竹竿敲了一下，西门庆看痴迷了，被王婆看到了，就开始撮合两人好事，王婆作为潘金莲的代理人收了不少好处费，那我们假设一下： 
        *如果没有王婆在中间牵线，这两个不要脸的能成事吗？难说得很！ 
        */
        public class XiMenQiang
        {
            /** 
             * @param args 
             */
            public static void main(String[] args)
            {
                WangPo wangPo;
                //把王婆叫出来  
                wangPo = new WangPo();
                //然后西门庆说，我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏：  
                wangPo.makeEyesWithMan();
                //看到没有表面是王婆在做，其实爽的是潘金莲  
                wangPo.happyWithMan();


                //西门庆勾引贾氏  
                JiaShi jiaShi = new JiaShi();
                wangPo = new WangPo(jiaShi);
                wangPo.makeEyesWithMan();
                wangPo.happyWithMan();
            }
        }
    }
}
